A substantial portion of computer systems communicate over networks using transmission of data in packetized format at very high data rates. A common network communication protocol is known as the Ethernet and transmits data packets between different computer systems at rates of 1 Gbit/second or more.
Upon receipt of a data packet a computer system typically stores the data in a packet buffer before the data is provided to the computer processes for which the data is intended. Once the data is provided to the intended processes, the packet buffer in which the data was stored are freed to accept additional data. Often, the rate at which data is received is different from the rate at which the computer system frees packet buffers to accept additional data, which may result in buffer overflow. Many attempts have been undertaken to avoid buffer overflow while avoiding use of excessive amounts of buffer memory.
In one attempt, a packet receiving-transmitting method for use on a packet-switching network, such as the Ethernet, stores each received packet in a packet buffer of a fixed size and associated with a single descriptor. Based on a threshold logical segmentation size determined by the network protocol, each packet buffer is partitioned into a plurality of segments, each having an ending point linked to an Early Receive/Transmit interrupt signal with the ending point of the packet buffer being linked to an OK interrupt signal. In response to each Early Receive/Transmit interrupt signal, the packet data stored are retrieved and forwarded; and in response to the OK interrupt signal, all the remaining packet data in the packet buffer are retrieved and forwarded. After this, a write-back operation is performed on the associated descriptor so as to reset the descriptor to unused status.
Thus, there is a need to improve management of memory used to receive data packets.